package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Demo {
    public static void main(String[] args) throws Exception {
        /*
        * 传统方式
        * 优点：简单明了
        * 缺点：程序写死了，这意味着后期如果更换了别的类，这里要修改代码
        * */
        User user = new User();
        user.sayHello();

        /*
        * 放射机制
        * 优点：灵活，不会因为被调用对象的修改，而总是同时修改当前类
        * 缺点：要编写大量放射代码，代码的可读性也会降低
        * */
        Class cls = Class.forName("demo1.User");
        User user1 = (User) cls.newInstance();
        user1.sayHello();

        /*
        * 使用Sping容器
        * 优点：接住Spring强大的功能，可以基于IOC的思想，对Bean进行管理。自动装配，通过AOP动态补充逻辑等等
        * 缺点：没啥缺点
        * */
        //基于demo1包，管理该包（包含子孙包）中的类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("demo1");
        User user2 = (User) context.getBean(User.class);
        user2.sayHello();
    }
}
